<?php
namespace app\controller;

use app\Controller;
use app\model\Pay as Model;
// use EasyWeChat\Pay\Application;
use EasyWeChat\Factory;
/*
 * 微信支付控制器
 * @author Mateng <Index.php>
 */
class Wepay extends Controller
{
    /**
     * 回调通知.
     * 
     * @param int $id
     * @return array
     */
    public function notify()
    {
        $app = Factory::payment(config('wechat.pay'));
        $response = $app->handlePaidNotify(function($message, $fail){
            // 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
            $pay = Model::where('out_trade_no', $message['out_trade_no'])->find();
            
            if (!$pay || $pay->pay_at > 0) { // 如果订单不存在 或者 订单已经支付过了
                return true; // 告诉微信，我已经处理完了，订单没找到，别再通知我了
            }
            ///////////// <- 建议在这里调用微信的【订单查询】接口查一下该笔订单的情况，确认是已经支付 /////////////
        
            if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态，不代表支付状态
                // 用户是否支付成功
                if ($message['result_code'] === 'SUCCESS') {
                    $pay->pay_at = time(); // 更新支付时间为当前时间
                    $pay->status = 2;
                    $pay->trade_state = $message['return_code'];
        
                // 用户支付失败
                } elseif ($message['result_code'] === 'FAIL') {
                    $pay->status = 3;
                    $pay->trade_state = $message['result_code'];
                    $pay->trade_state_desc = $message['return_msg'];
                }
            } else {
                return $fail('通信失败，请稍后再通知我');
            }
        
            $pay->save(); // 保存订单
        
            return true; // 返回处理完成
        });
        
        $response->send(); // return $response;
    }
}
